Triggers হল একটি ডাটাবেস ফিচার যা স্বয়ংক্রিয়ভাবে নির্দিষ্ট ইভেন্টের পর ডাটাবেসে কিছু কার্যক্রম সম্পাদন করতে সাহায্য করে। Trigger সাধারাণত INSERT, UPDATE, অথবা DELETE কুয়েরির আগ বা পর কার্যকর হয়। যখন নির্দিষ্ট ইভেন্ট ঘটে, তখন একটি Trigger চালানো হয়। BEFORE এবং AFTER Triggers দুটি জনপ্রিয় Trigger টাইপ যা ডাটাবেসের ডাটা পরিবর্তনের আগে বা পরে কাজ করে।
BEFORE Trigger
BEFORE Trigger তখন কার্যকর হয় যখন একটি INSERT, UPDATE, অথবা DELETE কুয়েরি চালানোর আগেই কোনো নির্দিষ্ট অপারেশন করতে হয়। এটি ডাটাবেসে পরিবর্তন আনার আগে চালানো হয়, এবং এই Trigger ব্যবহার করে আপনি ডাটাবেসে কোনো ধরনের পরিবর্তন করার আগে শর্ত পরীক্ষা করতে বা সংশোধন করতে পারেন।
BEFORE Trigger এর সুবিধা:
- ডাটা ভ্যালিডেশন: আপনি যদি ডাটাবেসে কোনো ডাটা ইনসার্ট বা আপডেট করার আগে শর্ত পরীক্ষা করতে চান তবে BEFORE Trigger ব্যবহার করা হয়।
- অপারেশন রদ করা: আপনি চাইলে কোনো ডাটা পরিবর্তন করার পূর্বে অপারেশনটিকে রদ করতে পারেন (যেমন, INSERT বা UPDATE অপারেশন বন্ধ করা)।
উদাহরণ: BEFORE Trigger
ধরা যাক, আপনার একটি employees টেবিল আছে, যেখানে কর্মীদের বয়সের উপর নির্ভর করে কিছু শর্ত রয়েছে। যদি কর্মী ১৮ বছরের কম বয়সী হয়, তাহলে সেই রেকর্ড INSERT করা যাবে না।
CREATE TRIGGER check_age_before_insert
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
-- যদি কর্মীর বয়স ১৮ বছরের কম হয়, তাহলে ইনসার্ট বন্ধ করে দিন
IF NEW.age < 18 THEN
RAISE (ABORT, 'Age must be 18 or older');
END IF;
END;
এখানে, BEFORE INSERT Trigger ব্যবহার করা হয়েছে যাতে ডাটা ইনসার্ট হওয়ার আগেই বয়স পরীক্ষা করা হয়।
AFTER Trigger
AFTER Trigger তখন কার্যকর হয় যখন কোনো INSERT, UPDATE, অথবা DELETE কুয়েরি সফলভাবে ডাটাবেসে সম্পন্ন হওয়ার পরে কোনো নির্দিষ্ট কার্যক্রম সম্পাদন করতে হয়। এই Triggerটি সাধারণত লগিং, হিসাব বা অন্যান্য নির্দিষ্ট কাজ করার জন্য ব্যবহৃত হয়।
AFTER Trigger এর সুবিধা:
- লগিং এবং হিসাব: ডাটা পরিবর্তন হওয়ার পরে আপনি কোনো কার্যক্রম যেমন লগিং বা হিসাব রাখতে পারেন।
- ডাটাবেস পরিবর্তন সম্পন্ন হওয়ার পর কার্যকরী কোড চালানো: কোনো ডাটাবেসে পরিবর্তন সফলভাবে সম্পন্ন হওয়ার পরে, এর সাথে সম্পর্কিত অন্যান্য অ্যাকশন সম্পাদন করতে AFTER Trigger ব্যবহার করা হয়।
উদাহরণ: AFTER Trigger
ধরা যাক, আপনি employees টেবিলের কোনো রেকর্ড UPDATE করার পর একটি লগ ফাইল বা টেবিল তৈরি করতে চান, যাতে পরিবর্তন সম্পর্কে তথ্য রাখা হয়।
CREATE TRIGGER log_employee_update
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
-- UPDATE হওয়ার পরে একটি লগ রেকর্ড ইনসার্ট করা
INSERT INTO employee_log (employee_id, old_salary, new_salary, change_date)
VALUES (NEW.id, OLD.salary, NEW.salary, DATETIME('now'));
END;
এখানে, AFTER UPDATE Trigger ব্যবহার করা হয়েছে, যাতে employees টেবিলের আপডেট হওয়ার পর, আপডেট সম্পর্কিত তথ্য employee_log টেবিলে সঞ্চিত হয়।
BEFORE এবং AFTER Trigger এর মধ্যে পার্থক্য
| বিষয় | BEFORE Trigger | AFTER Trigger |
|---|---|---|
| কার্যকর হওয়ার সময় | ডাটাবেসে কোনো পরিবর্তন হওয়ার আগে | ডাটাবেসে কোনো পরিবর্তন সম্পন্ন হওয়ার পরে |
| ব্যবহার | ডাটাবেসে পরিবর্তন করার আগে শর্ত যাচাই বা পরিবর্তন রোধ করা | ডাটাবেসে পরিবর্তন হওয়ার পরে লগিং বা হিসাব রাখা |
| প্রভাব | অপারেশনটি সম্পন্ন হওয়ার আগে ডাটা সংশোধন বা বাতিল করা যেতে পারে | অপারেশনটি সফলভাবে সম্পন্ন হওয়ার পর একটি অ্যাকশন সম্পাদন করা |
সারাংশ
BEFORE এবং AFTER Trigger দুটি গুরুত্বপূর্ণ টুল যা SQL ডাটাবেসে ডাটা পরিবর্তনের পূর্বে বা পরে কিছু কার্যক্রম পরিচালনা করতে ব্যবহৃত হয়। BEFORE Trigger আপনাকে ডাটাবেসে পরিবর্তন আসার আগে শর্ত যাচাই বা রোধ করতে সাহায্য করে, এবং AFTER Trigger আপনাকে কোনো ডাটাবেস পরিবর্তন সফলভাবে সম্পন্ন হওয়ার পর নির্দিষ্ট কার্যক্রম সম্পাদন করতে সাহায্য করে। যথাযথভাবে ব্যবহার করলে, এই Triggers ডাটাবেসের পারফরম্যান্স এবং ডাটা ইন্টিগ্রিটি নিশ্চিত করতে সাহায্য করতে পারে।
Read more